/**
* Copyright 2009 Maxim Cassian Porges
* 
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* 
*     http://www.apache.org/licenses/LICENSE-2.0
* 
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package loom.abc
{
	import loom.abc.enum.TraitKind;
	import loom.util.StringUtil;
	
    /**
     * Loom representation of <code>Trait_Method</code> in the ABC file format. Also represents <code>Trait_Getter</code> and
     * <code>Trait_Setter</code> (differentiated in the spec by the <code>kind</code> of the trait.
     * 
     * @see http://www.adobe.com/devnet/actionscript/articles/avm2overview.pdf     "Method, getter, and setter traits" in the AVM Spec (page 31)
     */
	public class MethodTrait extends TraitInfo
	{
        public var dispositionId : int;
        public var traitMethod : MethodInfo;
        
		public function MethodTrait()
		{
			super();
		}
		
		public function get isGetter() : Boolean
		{
			return (traitKind == TraitKind.GETTER);
		}

		public function get isSetter() : Boolean
		{
			return (traitKind == TraitKind.SETTER);
		}
		
		public function toString() : String
		{
            return StringUtil.substitute(
                "MethodTrait[name={0}, override={1}, metadata={2}, dispositionId={3}, method={4}]",
                traitMultiname,
                isOverride,
                metadata,
                dispositionId,
                traitMethod
            );
		}
	}
}